﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Negocio.Interface;
using Metadados;
using Dados;

namespace Negocio
{
    public class NGUnidade
    {
        private ITCadastroUnidade telaCadastro;

        int undCodigo { get; set; }
        string undDescricao { get; set; }
        string undSigla { get; set; }
        string mensagem { get; set; }

        public NGUnidade()
        {
            telaCadastro = null;
        }

        public NGUnidade(ITCadastroUnidade telaCadastroUnidade)
        {
            telaCadastro = telaCadastroUnidade;
        }

        #region Pegar e Colocar dados na Tela
        
        private Unidade pegarDados()
        {
            return new Unidade 
            {
                undCodigo = telaCadastro.undCodigo,
                undDescricao = telaCadastro.undDescricao,
                undSigla = telaCadastro.undSigla
            };
        }

        private void colocarDados(Unidade obj)
        {
            telaCadastro.undCodigo = obj.undCodigo;
            telaCadastro.undDescricao = obj.undDescricao;
            telaCadastro.undSigla = obj.undSigla;
        }
        #endregion

        #region Manipulação

        public void gravar()
        {

            #region Validações
            if (telaCadastro.undCodigo == int.MinValue)
            {
                telaCadastro.mensagem = " O campo codigo é obrigatorio! ";
                return;
            }

            if (telaCadastro.undDescricao == string.Empty)
            {
                telaCadastro.mensagem = " O campo descrição é obrigatorio! ";
                return;
            }

            if (telaCadastro.undSigla == string.Empty)
            {
                telaCadastro.mensagem = " O campo sigla é obrigatorio! ";
                return;
            }

            # endregion

            DBUnidade objDados = new DBUnidade();

            Unidade objUnidade = new Unidade();

            objUnidade = pegarDados();

            if (!consultar(objUnidade.undCodigo))
            {
                if (objDados.incluir(objUnidade))
                {
                    telaCadastro.mensagem = "Unidade cadastrada com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro no cadastro da unidadeo!";
                }
            }
            else
            {
                if (objDados.atualizar(objUnidade))
                {
                    colocarDados(objUnidade);
                    telaCadastro.mensagem = "Unidade alterada com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro ao alterar a unidade!";
                }
            }

        }


        public void deletar(int p_undCodigo)
        {
            DBUnidade objDados = new DBUnidade();

            if (objDados.excluir(p_undCodigo))
            {
                telaCadastro.mensagem = "Unidade excluida com sucesso!";
            }
            else
            {
                telaCadastro.mensagem = "Unidade não pode ser excluida!";
            }

            limpaTela();
        }

        public void limpaTela()
        {
            telaCadastro.undCodigo = int.MinValue;
            telaCadastro.undDescricao = string.Empty;
            telaCadastro.undSigla = string.Empty;
            
        }

        public bool consultar(int p_undCodigo)
        {
            DBUnidade objDados = new DBUnidade();

            try
            {
                colocarDados(objDados.consultar(p_undCodigo)[0]);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        public List<Unidade> consultar()
        {
            DBUnidade objDados = new DBUnidade();
            try
            {
                return objDados.consultar();
            }
            catch (Exception)
            {

                return null;
            }
        }
        #endregion 
    }
}
